Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 494942de07e13aca2f7e9d9700787a3dd8a6f3bd


Parents : 66d98f4
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-05-09T21:11:44-05:00

style: apply formatting fixes across backend, frontend, and tests

Changes
Diff

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9d1cb5dd..feaa9c33 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -59,10 +59,10 @@ You also confirm that you have the right to submit the contribution under these
## Generative AI policy
-You may use generative AI tools when contributing, on the condition that your setup actually supplies the model with enough context to produce sound work: relevant files, constraints, failing tests, and project conventions. Vague prompts and thin context lead to wrong or generic patches; that burden is on the contributor, not the reviewers.
+You may use generative AI tools when contributing, on the condition that your setup actually supplies the model with enough context to produce sound work and your provider does not train on the code, read [Reticulum Zen](https://reticulum.network/manual/zen.html) and the [Reticulum License](https://reticulum.network/manual/license.html). Vague prompts and thin context lead to wrong or generic patches; that burden is on the contributor, not the reviewers.
You must disclose AI usage in the patch message body (or commit message, if you prefer): state which tools or services you used in a material way for that change (for example, model or product name, and whether it was local or cloud). If a change was written without meaningful AI assistance, say so briefly. This is so reviewers can judge scope and provenance; it is not a substitute for your own review and testing.
-We prefer models that run locally or offline when that is practical for you.
+We strongly prefer models that run locally or offline when that is practical for you.
Contributions must still be yours to justify and maintain. Do not submit bulk-generated changes you have not read, understood, and tested. We are not looking for unreviewed AI output or style-only churn from tools used without engineering/architectural judgment.

diff --git a/meshchatx/src/backend/docs_manager.py b/meshchatx/src/backend/docs_manager.py
index d2f40796..52963298 100644
--- a/meshchatx/src/backend/docs_manager.py
+++ b/meshchatx/src/backend/docs_manager.py
@@ -282,7 +282,7 @@ class DocsManager:
<body class="p-4 md:p-8 max-w-4xl mx-auto">
<h1 class="text-2xl font-bold mb-4">MeshChatX Documentation</h1>
<ul class="list-disc pl-5">
- {''.join(index_links)}
+ {"".join(index_links)}
</ul>
</body>
</html>"""

diff --git a/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue b/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue
index 84cdf63e..36e5efcb 100644
--- a/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue
+++ b/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue
@@ -2358,7 +2358,14 @@ export default {
const match = hash.match(/popout=([^&]+)/);
return match ? decodeURIComponent(match[1]) : null;
},
- downloadNomadNetFile(destinationHash, filePath, data, onSuccessCallback, onFailureCallback, onProgressCallback) {
+ downloadNomadNetFile(
+ destinationHash,
+ filePath,
+ data,
+ onSuccessCallback,
+ onFailureCallback,
+ onProgressCallback
+ ) {
try {
// set callbacks for nomadnet filePath download
this.nomadnetFileDownloadCallbacks[this.getNomadnetFileDownloadCallbackKey(destinationHash, filePath)] =

diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 1fbc8b25..c9e1c2ad 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -2708,4 +2708,4 @@
"banishment_lifted": "Banishment lifted successfully",
"failed_lift_banishment": "Failed to lift banishment"
}
-}
\ No newline at end of file
+}

diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 215689f2..15d8ce93 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -2708,4 +2708,4 @@
"action_changelog": "Cambio",
"action_changelog_desc": "Cambios recientes"
}
-}
\ No newline at end of file
+}

diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index abd34c70..8251f8f8 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -2708,4 +2708,4 @@
"action_changelog": "Changer de journal",
"action_changelog_desc": "Changements récents"
}
-}
\ No newline at end of file
+}

diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 7e3d752f..c8a74ca4 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -2708,4 +2708,4 @@
"action_changelog": "Changelog",
"action_changelog_desc": "Modifiche recenti"
}
-}
\ No newline at end of file
+}

diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index 4afc52c7..a399b36f 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -2708,4 +2708,4 @@
"action_changelog": "Changelog",
"action_changelog_desc": "Recente wijzigingen"
}
-}
\ No newline at end of file
+}

diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index edcda63b..954adb13 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -2708,4 +2708,4 @@
"banishment_lifted": "Banishment lifted successfully",
"failed_lift_banishment": "Failed to lift banishment"
}
-}
\ No newline at end of file
+}

diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index 203c9faa..a5279ce1 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -2708,4 +2708,4 @@
"action_changelog": "更新日志",
"action_changelog_desc": "最近的更改"
}
-}
\ No newline at end of file
+}

diff --git a/tests/frontend/CallPage.test.js b/tests/frontend/CallPage.test.js
index baa0e3e3..2f584a77 100644
--- a/tests/frontend/CallPage.test.js
+++ b/tests/frontend/CallPage.test.js
@@ -22,7 +22,8 @@ describe("CallPage.vue", () => {
voicemail: { unread_count: 0 },
};
- if (url.includes("/api/v1/config")) return Promise.resolve({ data: { config: { telephone_enabled: true } } });
+ if (url.includes("/api/v1/config"))
+ return Promise.resolve({ data: { config: { telephone_enabled: true } } });
if (url.includes("/api/v1/telephone/history")) return Promise.resolve({ data: { call_history: [] } });
if (url.includes("/api/v1/announces")) return Promise.resolve({ data: { announces: [] } });
if (url.includes("/api/v1/telephone/status")) return Promise.resolve({ data: { active_call: null } });

diff --git a/tests/frontend/NomadNetworkPage.test.js b/tests/frontend/NomadNetworkPage.test.js
index b1a26f16..0c134664 100644
--- a/tests/frontend/NomadNetworkPage.test.js
+++ b/tests/frontend/NomadNetworkPage.test.js
@@ -481,7 +481,7 @@ describe("NomadNetworkPage.vue", () => {
"version=2&format=raw",
vi.fn(),
vi.fn(),
- vi.fn(),
+ vi.fn()
);
expect(WebSocketConnection.send).toHaveBeenCalledOnce();
const payload = JSON.parse(WebSocketConnection.send.mock.calls[0][0]);
@@ -491,28 +491,14 @@ describe("NomadNetworkPage.vue", () => {
it("omits data field when data is null", () => {
const wrapper = mountNomadNetworkPage();
- wrapper.vm.downloadNomadNetFile(
- "b".repeat(32),
- "/file/data.bin",
- null,
- vi.fn(),
- vi.fn(),
- vi.fn(),
- );
+ wrapper.vm.downloadNomadNetFile("b".repeat(32), "/file/data.bin", null, vi.fn(), vi.fn(), vi.fn());
const payload = JSON.parse(WebSocketConnection.send.mock.calls[0][0]);
expect(payload.nomadnet_file_download).not.toHaveProperty("data");
});
it("omits data field when data is undefined", () => {
const wrapper = mountNomadNetworkPage();
- wrapper.vm.downloadNomadNetFile(
- "c".repeat(32),
- "/file/data.bin",
- undefined,
- vi.fn(),
- vi.fn(),
- vi.fn(),
- );
+ wrapper.vm.downloadNomadNetFile("c".repeat(32), "/file/data.bin", undefined, vi.fn(), vi.fn(), vi.fn());
const payload = JSON.parse(WebSocketConnection.send.mock.calls[0][0]);
expect(payload.nomadnet_file_download).not.toHaveProperty("data");
});


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────